
<!doctype html>
<html lang="en" class="no-js">
  <head>
    
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1">
      
      
      
      
      <link rel="icon" href="../assets/images/favicon.png">
      <meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.3">
    
    
      
        <title>nginx+gunicorn部署 - py教程</title>
      
    
    
      <link rel="stylesheet" href="../assets/stylesheets/main.e35208c4.min.css">
      
        
        <link rel="stylesheet" href="../assets/stylesheets/palette.ef6f36e2.min.css">
        
      
    
    
    
      
        
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
        <style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
      
    
    
    
      <link rel="stylesheet" href="../extra.css">
    
    
      
    
    
  </head>
  
  
    
    
    
    
    
    <body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
  
    
    <script>function __prefix(e){return new URL("..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
    
    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
    <label class="md-overlay" for="__drawer"></label>
    <div data-md-component="skip">
      
        
        <a href="#nginxgunicorn" class="md-skip">
          Skip to content
        </a>
      
    </div>
    <div data-md-component="announce">
      
    </div>
    
      <header class="md-header" data-md-component="header">
  <nav class="md-header__inner md-grid" aria-label="Header">
    <a href=".." title="py教程" class="md-header__button md-logo" aria-label="py教程" data-md-component="logo">
      
  
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>

    </a>
    <label class="md-header__button md-icon" for="__drawer">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
    </label>
    <div class="md-header__title" data-md-component="header-title">
      <div class="md-header__ellipsis">
        <div class="md-header__topic">
          <span class="md-ellipsis">
            py教程
          </span>
        </div>
        <div class="md-header__topic" data-md-component="header-topic">
          <span class="md-ellipsis">
            
              nginx+gunicorn部署
            
          </span>
        </div>
      </div>
    </div>
    
    
    
      <label class="md-header__button md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
      </label>
      
<div class="md-search" data-md-component="search" role="dialog">
  <label class="md-search__overlay" for="__search"></label>
  <div class="md-search__inner" role="search">
    <form class="md-search__form" name="search">
      <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
      <label class="md-search__icon md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
      </label>
      <button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
      </button>
    </form>
    <div class="md-search__output">
      <div class="md-search__scrollwrap" data-md-scrollfix>
        <div class="md-search-result" data-md-component="search-result">
          <div class="md-search-result__meta">
            Initializing search
          </div>
          <ol class="md-search-result__list"></ol>
        </div>
      </div>
    </div>
  </div>
</div>
    
    
  </nav>
</header>
    
    <div class="md-container" data-md-component="container">
      
      
        
      
      <main class="md-main" data-md-component="main">
        <div class="md-main__inner md-grid">
          
            
              
              <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    


<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  <label class="md-nav__title" for="__drawer">
    <a href=".." title="py教程" class="md-nav__button md-logo" aria-label="py教程" data-md-component="logo">
      
  
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>

    </a>
    py教程
  </label>
  
  <ul class="md-nav__list" data-md-scrollfix>
    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href=".." class="md-nav__link">
        首页
      </a>
    </li>
  

    
      
      
      

  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
        <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" >
      
      <label class="md-nav__link" for="__nav_2">
        User Guide
        <span class="md-nav__icon md-icon"></span>
      </label>
      <nav class="md-nav" aria-label="User Guide" data-md-level="1">
        <label class="md-nav__title" for="__nav_2">
          <span class="md-nav__icon md-icon"></span>
          User Guide
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
  
  
  
    <li class="md-nav__item">
      <a href="../about/" class="md-nav__link">
        关于
      </a>
    </li>
  

          
            
  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
        <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_2" type="checkbox" id="__nav_2_2" >
      
      <label class="md-nav__link" for="__nav_2_2">
        haha
        <span class="md-nav__icon md-icon"></span>
      </label>
      <nav class="md-nav" aria-label="haha" data-md-level="2">
        <label class="md-nav__title" for="__nav_2_2">
          <span class="md-nav__icon md-icon"></span>
          haha
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
  
  
  
    <li class="md-nav__item">
      <a href="../source/222/" class="md-nav__link">
        文件222
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../source/333/" class="md-nav__link">
        文件333
      </a>
    </li>
  

          
        </ul>
      </nav>
    </li>
  

          
        </ul>
      </nav>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="https://www.baidu.com/" class="md-nav__link">
        有疑问?点我!
      </a>
    </li>
  

    
  </ul>
</nav>
                  </div>
                </div>
              </div>
            
            
              
              <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  
  
  
    
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#_1" class="md-nav__link">
    运行前端
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_2" class="md-nav__link">
    部署后端
  </a>
  
    <nav class="md-nav" aria-label="部署后端">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#_3" class="md-nav__link">
    后端虚拟环境地址
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_4" class="md-nav__link">
    云服务器
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#nginxgunicorn_1" class="md-nav__link">
    nginx+gunicorn部署
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_5" class="md-nav__link">
    前端部署
  </a>
  
    <nav class="md-nav" aria-label="前端部署">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#_6" class="md-nav__link">
    汇总代码
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_7" class="md-nav__link">
    
  </a>
  
</li>
      
    </ul>
  
</nav>
                  </div>
                </div>
              </div>
            
          
          <div class="md-content" data-md-component="content">
            <article class="md-content__inner md-typeset">
              
                
                
                <h1 id="nginxgunicorn">nginx+gunicorn部署</h1>
<h2 id="_1">运行前端</h2>
<ul>
<li>使用<code>live-server</code>来运行<code>index.html</code></li>
</ul>
<pre><code class="language-shell">live-server --port=3344
</code></pre>
<h2 id="_2">部署后端</h2>
<p><a href="https://www.dusaiphoto.com/article/71/"><code>Django部署参考资料</code></a></p>
<ul>
<li>
<p>[x] DRF项目精简</p>
</li>
<li>
<p>[x] 将DRF项目上传至gitee</p>
</li>
<li>
<p>[x] 连接阿里云服务器</p>
</li>
<li>
<p>[x] 服务器上下载django</p>
</li>
<li>
<p>[ ] 使用wsgi本地运行django项目</p>
</li>
</ul>
<blockquote>
<p>不需要本地运行</p>
</blockquote>
<ul>
<li>
<p>[x] 配置nginx文件</p>
</li>
<li>
<p>[x] 部署DRF项目</p>
</li>
</ul>
<h3 id="_3">后端虚拟环境地址</h3>
<pre><code>/Users/mac/.virtualenvs/PycharmProjects/uni_test/bin/python
</code></pre>
<ul>
<li>激活虚拟环境</li>
</ul>
<pre><code>source /Users/mac/.virtualenvs/PycharmProjects/uni_test/bin/activate
deactivate
</code></pre>
<ul>
<li>仓库地址</li>
</ul>
<pre><code>https://gitee.com/bode135/hello_uni.git

git remote -v   # 输出当前连接的git仓库
</code></pre>
<ul>
<li>创建虚拟环境</li>
</ul>
<pre><code>python3 -m venv env   # 创建虚拟环境, linux版本: virtualenv env
pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/ # 镜像源

source env/bin/activate     # 激活虚拟环境, win版本: env\Scripts\activate.bat

pip install --upgrade pip       # 更新pip
pip install -r requirements.txt # 安装pip依赖项

# 创建.gitignore, 并写入忽略项
...
# 运行 shells/commit_and_push.sh. 可在命令后带文本备注.
sh shells/commit_and_push.sh &quot;这是测试使用sh脚本提交. 测   试*^  &amp;*.&quot;
</code></pre>
<h2 id="_4">云服务器</h2>
<ul>
<li>连接服务器</li>
</ul>
<pre><code>sudo -i
# input password
ssh root@47.97.159.133
</code></pre>
<ul>
<li>测试环境</li>
</ul>
<pre><code>mkdir uniapps
cd uniapps/

git clone https://gitee.com/bode135/hello_uni.git
cd hello_uni/

# 查看文件和python版本信息
ls
python -V
python3 -V

# 创建虚拟环境
virtualenv env
ls

# 运行虚拟环境, 并运行服务器
# 法1
source env/bin/activate     // deactivate # 退出虚拟环境
# sh shells/run.sh // 运行服务的脚本
python manage.py runserver 8001


# 法2
source venv.sh

sh shells/run.sh

# 软连接
sudo ln -sf /etc/nginx/sites-available/bode.vip /etc/nginx/sites-enabled
</code></pre>
<ul>
<li>nginx运行项目</li>
</ul>
<pre><code># 暂停正在运行的项目
# sudo service nginx stop
sudo service nginx start
sudo service nginx reload



# 创建新的nginx配置文件
cd /etc/nginx/sites-available
sudo vi hello_uni.vip
</code></pre>
<ul>
<li>全局配置</li>
</ul>
<pre><code># IP
47.97.159.133


# nginx配置文件地址
cd /etc/nginx/sites-available
sudo vi hello_uni.vip

mkdir -p /home/sites/uniapps/
mkdir -p /home/sites/uniapps/hello_uni      # 创建路径

# 项目地址
# 旧的: cd ~/uniapps/hello_uni
cd /home/sites/uniapps/hello_uni

# 杀掉指定端口
lsof -i tcp:8000
kill -9 6540
</code></pre>
<ul>
<li>nginx配置</li>
</ul>
<pre><code>server {
  charset utf-8;
  listen 443;
  server_name 47.97.159.133;  # 改成你的 IP

  location /static {
    alias /home/sites/uniapps/hello_uni/static;
  }

  location /media {
    alias /home/sites/uniapps/hello_uni/media;
  }

  location / {
    proxy_set_header Host $host;
    proxy_pass http://unix:/tmp/47.97.159.133.socket;  # 改成你的 IP
  }
}

server {
  charset utf-8;
  listen 3389;
  server_name 47.97.159.133;  # 改成你的 IP

  location /static {
    alias /home/sites/uniapps/hello_uni/static;
  }

  location /media {
    alias /home/sites/uniapps/hello_uni/media;
  }

  location / {
    proxy_set_header Host $host;
    proxy_pass http://unix:/tmp/47.97.159.133.socket;  # 改成你的 IP
  }
}



# --------------------------------------
# (env) ../sites-available$ 
sudo ln -s /etc/nginx/sites-available/hello_uni.vip /etc/nginx/sites-enabled

# gunicorn
pip3 install gunicorn
cd /home/sites/uniapps/hello_uni/uni_test/
sudo service nginx reload
gunicorn --bind unix:/tmp/47.97.159.133.socket uni_test.wsgi:application

</code></pre>
<ul>
<li>启动服务</li>
</ul>
<pre><code># 软连接
sudo ln -sf /etc/nginx/sites-available/bode.vip /etc/nginx/sites-enabled

cd /home/sites/

# nginx配置文件地址
# sudo vim /etc/nginx/sites-available/hello_uni.vip

cd /etc/nginx/sites-available
sudo vi hello_uni.vip

# gunicorn
# pip3 install gunicorn
cd /home/sites/uniapps/hello_uni/
# source env/bin/activate
sudo service nginx reload
gunicorn --bind 127.0.0.1:8000 uni_test.wsgi:application&amp;

// gunicorn --bind unix:/tmp/47.97.159.133.socket uni_test.wsgi:application


gunicorn --bind 127.0.0.1:8000 uni_test.wsgi:application&amp;


gunicorn uni_test.wsgi:application -b 127.0.0.1:8022&amp;

# my_blog
cd /home/sites/bode.vip
source env/bin/activate
// gunicorn --bind unix:/tmp/47.97.159.133.socket my_blog.wsgi:application
gunicorn -w 3 -b 127.0.0.1:8080 my_blog.wsgi:application

</code></pre>
<ul>
<li>my_blog</li>
</ul>
<pre><code>server {
  charset utf-8;
  server_name  47.97.159.133;
  listen 80;

  location /static {
    alias /home/sites/bodexiong.vip/django_blog_tutorial/collected_static;
  }

  location /media {
    alias /home/sites/bodexiong.vip/django_blog_tutorial/media;
  }

  location / {
    proxy_set_header Host $host;
    proxy_pass http://unix:/tmp/47.97.159.133.socket;  # 改成你的 IP
  }
}


server {
  listen 80;
  listen 443;
  charset utf-8;
  server_name 127.0.0.1;
  server_name  47.97.159.133;

  location /static {
    alias /home/sites/bodexiong.vip/django_blog_tutorial/collected_static;
  }

  location /media {
    alias /home/sites/bodexiong.vip/django_blog_tutorial/media;
  }

  location / {
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:8080;
  }
}

</code></pre>
<h2 id="nginxgunicorn_1">nginx+gunicorn部署</h2>
<blockquote>
<p>同一个服务器部署多个Django项目</p>
</blockquote>
<ul>
<li>nginx配置</li>
</ul>
<pre><code># uni后端
server {
  charset utf-8;
  listen 3389;
  server_name 47.97.159.133;  # 改成你的 IP

  location /static {
    alias /home/sites/uniapps/hello_uni/static;
  }

  location /media {
    alias /home/sites/uniapps/hello_uni/media;
  }

  location / {
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:8000
  }
}

# 博客
server {
  listen 80;
  listen 443;
  charset utf-8;
  server_name 127.0.0.1;
  server_name  47.97.159.133;

  location /static {
    alias /home/sites/bodexiong.vip/django_blog_tutorial/collected_static;
  }

  location /media {
    alias /home/sites/bodexiong.vip/django_blog_tutorial/media;
  }

  location / {
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:8080;
  }
}

</code></pre>
<ul>
<li>运行server</li>
</ul>
<pre><code># 软连接
sudo ln -sf /etc/nginx/sites-available/bode.vip /etc/nginx/sites-enabled

cd /home/sites/

# nginx配置文件地址
# sudo vim /etc/nginx/sites-available/hello_uni.vip

cd /etc/nginx/sites-available
sudo vi hello_uni.vip

# gunicorn
# pip3 install gunicorn
cd /home/sites/uniapps/hello_uni/
# source env/bin/activate
sudo service nginx reload


gunicorn --bind 127.0.0.1:8000 uni_test.wsgi:application
gunicorn -w 3 -b 127.0.0.1:8080 my_blog.wsgi:application
</code></pre>
<h2 id="_5">前端部署</h2>
<ul>
<li>h5</li>
</ul>
<pre><code># 首页
server {
  listen 80;
  charset utf-8;
  server_name 127.0.0.1;
  server_name  47.97.159.133;

   location / {
       root   /etc/nginx/sites-available;
       index  index.html index.htm;
   }
}
</code></pre>
<h3 id="_6">汇总代码</h3>
<pre><code class="language-shell"># 首页: uni前端, /mds: markdown文档
server {
  listen 80;
  charset utf-8;
  server_name 127.0.0.1;
  server_name  47.97.159.133;

  # uni-app's client
  location / {
    root   /etc/nginx/sites-available;
    index  index.html index.htm;
  }

  # markdown documents
  location  /mds {
    alias  /etc/nginx/sites-available/mds/test_md_page.github.io;
    index  index.html index.htm;
    proxy_pass   http://localhost:7080;
  }
}



# uni后端
server {
  charset utf-8;
  listen 3389;
  server_name 47.97.159.133;  # 改成你的 IP

  location /static {
    alias /home/sites/uniapps/hello_uni/static;
  }

  location /media {
    alias /home/sites/uniapps/hello_uni/media;
  }

  location / {
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:8000;
  }
}

# my blog
server {
  # listen 80;
  listen 443;
  charset utf-8;
  server_name 127.0.0.1;
  server_name  47.97.159.133;

  location /static {
    alias /home/sites/bodexiong.vip/django_blog_tutorial/collected_static;
  }

  location /media {
    alias /home/sites/bodexiong.vip/django_blog_tutorial/media;
  }

  location / {
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:8080;
  }
}
</code></pre>
<ul>
<li>博客暂时不用</li>
</ul>
<pre><code class="language-shell"># ------------ 暂时不用
# my blog
server {
  listen 80;
  listen 443;
  charset utf-8;
  server_name 127.0.0.1;
  server_name  47.97.159.133;

  location /static {
    alias /home/sites/bodexiong.vip/django_blog_tutorial/collected_static;
  }

  location /media {
    alias /home/sites/bodexiong.vip/django_blog_tutorial/media;
  }

  location / {
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:8080;
  }
}
</code></pre>
<ul>
<li>运行server</li>
</ul>
<pre><code># 软连接
sudo ln -sf /etc/nginx/sites-available/bode.vip /etc/nginx/sites-enabled

cd /home/sites/

# nginx配置文件地址
# sudo vim /etc/nginx/sites-available/hello_uni.vip

cd /etc/nginx/sites-available
sudo vi hello_uni.vip

# gunicorn
# pip3 install gunicorn
cd /home/sites/uniapps/hello_uni/
# source env/bin/activate
sudo service nginx reload


gunicorn --bind 127.0.0.1:8000 uni_test.wsgi:application
gunicorn -w 3 -b 127.0.0.1:8080 my_blog.wsgi:application
</code></pre>
<h2 id="_7"></h2>
                
              
              
                


              
            </article>
          </div>
        </div>
        
      </main>
      
        
<footer class="md-footer">
  
  <div class="md-footer-meta md-typeset">
    <div class="md-footer-meta__inner md-grid">
      <div class="md-footer-copyright">
        
        Made with
        <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
          Material for MkDocs
        </a>
        
      </div>
      
    </div>
  </div>
</footer>
      
    </div>
    <div class="md-dialog" data-md-component="dialog">
      <div class="md-dialog__inner md-typeset"></div>
    </div>
    <script id="__config" type="application/json">{"base": "..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../assets/javascripts/workers/search.fe42c31b.min.js", "version": null}</script>
    
    
      <script src="../assets/javascripts/bundle.4ea5477f.min.js"></script>
      
    
  </body>
</html>